package dawnland03.model.action;

import dawnland03.model.action.parameter.ActionInputParam;
import dawnland03.model.action.parameter.ActionOutputParam;
import dawnland03.model.action.parameter.OutputParameters;
import dawnland03.model.entity.Entity;
import dawnland03.model.entity.attribute.PhysicalAttribute;
import dawnland03.model.task.BaseTask;

import java.util.Map;

/**
 * An Action object is the base task that an entity can do (like "move there", "get that" and so on).
 * It can be added to a BaseTask and followed (get status), waited to end or canceled.
 * <p/>
 * User: Petru Obreja (obrejap@yahoo.com)
 * Date: Jan 21, 2010
 * Time: 11:41:58 PM
 */
public interface Action {
    Entity getOwner();

    ActionType getActionType();

    Object getInputParam(ActionInputParam actionInputParam);

    OutputParameters getOutputParameters();

    Map<PhysicalAttribute, Integer> getPhysicalAttributeRequirements();

    Map<PhysicalAttribute, Double> getPhysicalAttributeMultipliers();

    void setParentBaseTask(BaseTask parentBaseTask);

    void act();

    Long getDuration();
}
